package com.mxin.ui.list

import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.scwang.smart.refresh.layout.api.RefreshLayout

interface IListView<T> : IListDataSourceEmitter<T> {

    fun bindListView(view: View, config: ((rv: RecyclerView) -> Unit)?):RecyclerView

}

interface IRefreshBinding{

    fun bindRefreshLayout(view: View, refreshListener: IRefreshListener, config: ((rL: RefreshLayout) -> Unit)?): RefreshLayout

}

/**
 * activity实现此接口，并调用{@see IRefreshBinding#bindRefreshLayout(...)}绑定控件后，自动设置【刷新】和【加载更多】监听，
 * 用户触发刷新控件的【刷新】和【加载更多】时，回调此接口函数
 */
interface IRefreshListener{

    fun refresh(page:Page)

    fun loadMore(page:Page)

}

/**
 * 中间类实现
 * 在获取数据源后被调用
 */
interface IListDataSourceEmitter<T>{

    fun emit(t: PageData<T>)

}

/**
 *  adapter实现
 *  在中间类中被{@see IListDataSourceEmitter#emit}中被调用
 */
interface DataSource<T>{

    fun addData(t: List<T>?)

    fun setData(t: List<T>?)

}